1. Field of the Invention
This invention relates to “flow-based programming,” and in particular to application of flow-based programming techniques to the field of “cloud computing.” In flow-based programming, applications are defined as networks of black box processes which exchange data across predefined one-way connections, the black box processes being reconnected to form the different applications without having to be changed internally.
According to the invention, a high-level compiler uses a modified flow language referred-to as “Resilient Optimizing Flow Language” (ROFL) that converts inputs relating to source program and data definitions to generate bytecode objects that can be used by an execution engine to allocate input data to “processes” that are created by the execution engine based on available resources, so as to evaluate or perform particular tasks on the input data.
The flow-based system and method of the invention allows a service-provider to configure and update an interface between users of the service and distributed resources on the Internet that perform the service in a more natural and intuitive manner, without worrying about the precise timing of events. The invention thus provides a way to facilitate implementation of cloud computing applications by shifting emphasis from sequence of steps to transformations performed on streams of data.
2. Description of Related Art
The term “cloud computing” refers to the general concept of enabling a user to utilize software that runs on remote computing or processing devices, often referred to as “resources,” connected to the user by the Internet, without knowledge on the part of the user of the nature or location of the devices on which the software is executed. The user accesses the “cloud,” i.e., utilizes the software, through a website that enables the user to select the software and input data or commands. The data and commands input by the user are transferred-to the remote computing or processing devices through the interface, and results transmitted back to the consumer.
In order to most efficiently carry out the required services or computations, tasks performed by the user-selected software are allocated to multiple computing devices or processors according to predetermined resource-allocating formulas or calculations. The process of allocating the tasks to the computing devices or processors so as to perform the requested services or computations most efficiently is known as “flow optimization.”
The present invention utilizes a technique known as flow-based programming to optimize flow and simplify implementation of the cloud computing applications. Instead of conventional interface software that defines a precise sequence of actions to be performed by the various components of the interface, the flow-based approach shifts the emphasis to vector transformations performed on steams of data.
The concept of flow-based programming is not new. In fact, flow-based programming technology dates back to the 1960's, and has been used by the banking industry for off-line applications since at least the mid-1970's, as described in the J. Paul Morrison's book entitled Flow-Based Programming: A New Approach to Application Development, van Nostrand Reinhold, 1994. Since then, a number of programming languages have been developed to implement flow-based programming techniques in various contexts involving the allocation of processing tasks to multiple processors.
One of the ways that the present invention departs from conventional flow-based programming implementations is in its application to a network or “cloud computing” environment, accomplished by utilizing a simplified flow-based programming language developed by the inventors and referred-to herein as ROFL (“Resilient Optimizing Flow Language”), which is based on or piggybacks on the existing language known as Python but which has the following distinguishing characteristics:                Purely Equational                    Users only have to write their equations, and don't have to worry about the plumbing at the language level. ROFL piggybacks on Python's expression syntax, so the learning curve isn't too severe for programmers used to C-like expression syntax.                        Purely Functional                    ROFL code is purely functional. This means there are many opportunities to optimize and parallelize code since there is no need to worry about side effects when doing code motion. Generated code will run much faster than naked Python.                        Safety                    The language focuses on data programming, not systems programming. The corresponding risk of code injection and other attacks is greatly reduced. By default, no systems commands are available, nor is an interpreter recursively callable from the surface language (Python constructs like eval and exec are not present).                        Non-recursive                    Both the user and service provider can rest assured that their job will not run indefinitely because of unbound recursion. No recursion is permitted at the function definition level, and all looping constructs are bounded.            This also makes job runtime estimation easier (though still not perfect in the presence of discontinuous functions), since we can profile a single evaluation of the function and scale that to the computed domain size.                        Other Applications                    With systems commands enabled (see Safety, above) ROFL can provide a task-level parallelism language (kind of like UNIX pipes, but more expressive). The overall directed acyclic graph (DAG) structure of ROFL affords many other opportunities for defining complicated job flows, etc.                        
Currently, cloud computing interfaces must be custom designed by a skilled programmer, based on software and data definitions provided by the service provider. The present invention is intended to facilitate the setup of such “cloud computing” interfaces so that they can be programmed by directly inputting software specifications and data source definitions using the simplified ROFL language, without the need for specialized programming skills. ROFL is similar to a language known as SISAL (Streams and Iteration in a Single Assignment Language) and similar assignment-based languages currently used to facilitate the allocation of tasks or portions of tasks between different processing resources. In contrast to a more general programming language such as PASCAL or FORTRAN, parallel programming languages have improved array handling capabilities, a large library of functions adapted for allocation of processing resources, and so forth.
While the present invention is not necessarily limited to use of a particular parallel-processing adapted language, a preferred embodiment of the invention makes use of tokenizers, parsers, and other processing or configuration elements written in the Python language. Nevertheless, although the generation of vectors is described as involving a “Python”-based compiler, those skilled in the art will appreciate that some or all of the steps involved in compilation and vector generation may be carried out using programming languages other than Python. Further, it will be appreciated that while the present invention uses certain specific programming and flow optimization techniques that are generally known in the computing arts, the present invention is intended only to cover the particular application of those techniques to a particular cloud computing interface programming method and system, and not to cover the known programming and flow optimization techniques per se.
Ultimately, the invention seeks to simplify configuration of the cloud computing interface, so that the service provider may more easily adapt the interface to the requirements of different software or services, data sources, and processing resources, without the need for difficult programming. As such, it is not to be limited to a particular type of service or software, data source definitions, and so forth, or to particular arrangements of distributed resources arranged to perform the services or software to be offered by the service provider to the user through the interface.